import { sysLoginRuquest, sysProfileRequest } from '@/api/user.js'
import { getToken, setToken } from '@/utils/auth.js'
// import router from '@/router'
import router, { constantRoutes } from '@/router'
export default {
  // 开启命名空间
  namespaced: true,
  // 任何地方想要修改state!里面的值，只能调用mutations.里面的方法
  state: {
    // 这个值默认存储在内有上面
    token: getToken() || '',
    userInfo: {},
    routes: constantRoutes
  },
  mutations: {
    // 修改token值
    setTokenMutation(state, payload) {
      state.token = payload
      setToken(payload)
    },
    // 修改用户信息
    setUserInfoMutation(state, payload) {
      state.userInfo = payload
    },
    // 动态添加路由信息
    setRoutes(state, payload) {
      state.routes = [...constantRoutes, ...payload]
    }
  },
  actions: {
    // 只有被async修饰过的函数，函数内部才能使用await关键字
    async loginAction(context, payload) {
    // async loginAction({commit}, payload) {
      // 用了async+await， 就必须用try...catch包裹以下 --- 否则有些错误就不能捕获--- 浏览器控制台就会抱红色
      try {
        const data = await sysLoginRuquest(payload)
        // console.log('在actions发送请求', data)
        context.commit('setTokenMutation', data.data)
        // commit('setTokenMutation', data.data)

        router.push('/')

        // sysLoginRuquest(payload).then(data => {
        //   console.log('在actions发送请求,data')
        //   context.commit('setTokenMutation', data.data)
        // })
      } catch (err) {
        // 收集一些错误日志
        // console.log('错误')
      }
    },
    async getUserInfoAction(context, payload) {
      try {
        const data = await sysProfileRequest()
        // console.log('1111', data)
        context.commit('setUserInfoMutation', data.data)
        return Promise.resolve(data.data)
      } catch (err) {
        // console.log('获取用户基本信息失败')
      }
    },
    // 情况token和userInfo的action， 里面没有异步代码，就是把多个mutation合并在一起的意思
    logoutAction({ commit }) {
      commit('setTokenMutation', '')
      commit('setUserInfoMutation', {})
    }
  }
}
